{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.datasets import mnist\n",
    "from keras.layers import Flatten, Conv2D, MaxPool2D, Dense, Input,AveragePooling2D,Reshape,Activation,BatchNormalization\n",
    "from keras.models import Sequential\n",
    "from keras.optimizers import SGD\n",
    "from keras.utils import plot_model, to_categorical\n",
    "from keras_layer_normalization import LayerNormalization\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n",
    "#数据变成TensorFow为Backend的形式\n",
    "x_train=x_train.reshape(60000,28,28,1)\n",
    "x_test=x_test.reshape(10000,28,28,1)\n",
    "#把标签变成one-hot编码的形式\n",
    "y_train=to_categorical(y_train,num_classes=10)\n",
    "y_test=to_categorical(y_test,num_classes=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 构建vanilla LeNet-5网络\n",
    "model_vanilla = Sequential()\n",
    "model_vanilla.add(Conv2D(input_shape = (28,28,1), filters=6, kernel_size=(5,5), padding='valid', activation='tanh'))\n",
    "model_vanilla.add(MaxPool2D(pool_size=(2,2), strides=2))\n",
    "model_vanilla.add(Conv2D(input_shape=(14,14,6), filters=16, kernel_size=(5,5), padding='valid', activation='tanh'))\n",
    "model_vanilla.add(MaxPool2D(pool_size=(2,2), strides=2))\n",
    "model_vanilla.add(Flatten())\n",
    "model_vanilla.add(Dense(120, activation='tanh'))\n",
    "model_vanilla.add(Dense(84, activation='tanh'))\n",
    "model_vanilla.add(Dense(10, activation='softmax'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 构建LN LeNet-5网络\n",
    "model_ln = Sequential()\n",
    "model_ln.add(Conv2D(input_shape = (28,28,1), filters=6, kernel_size=(5,5), padding='valid', activation='tanh'))\n",
    "model_ln.add(MaxPool2D(pool_size=(2,2), strides=2))\n",
    "model_ln.add(Conv2D(input_shape=(14,14,6), filters=16, kernel_size=(5,5), padding='valid', activation='tanh'))\n",
    "model_ln.add(MaxPool2D(pool_size=(2,2), strides=2))\n",
    "model_ln.add(Flatten())\n",
    "model_ln.add(Dense(120, activation='tanh'))\n",
    "model_ln.add(LayerNormalization())\n",
    "model_ln.add(Dense(84, activation='tanh'))\n",
    "model_ln.add(LayerNormalization())\n",
    "model_ln.add(Dense(10, activation='softmax'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 构建BN LeNet-5网络\n",
    "model_bn = Sequential()\n",
    "model_bn.add(Conv2D(input_shape = (28,28,1), filters=6, kernel_size=(5,5), padding='valid', activation='tanh'))\n",
    "model_bn.add(MaxPool2D(pool_size=(2,2), strides=2))\n",
    "model_bn.add(Conv2D(input_shape=(14,14,6), filters=16, kernel_size=(5,5), padding='valid', activation='tanh'))\n",
    "model_bn.add(MaxPool2D(pool_size=(2,2), strides=2))\n",
    "model_bn.add(Flatten())\n",
    "model_bn.add(Dense(120, activation='tanh'))\n",
    "model_bn.add(BatchNormalization())\n",
    "model_bn.add(Dense(84, activation='tanh'))\n",
    "model_bn.add(BatchNormalization())\n",
    "model_bn.add(Dense(10, activation='softmax'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/10\n",
      "60000/60000 [==============================] - 14s 226us/step - loss: 0.8379 - acc: 0.7941\n",
      "Epoch 2/10\n",
      "60000/60000 [==============================] - 14s 225us/step - loss: 0.3414 - acc: 0.9153\n",
      "Epoch 3/10\n",
      "60000/60000 [==============================] - 14s 229us/step - loss: 0.2371 - acc: 0.9393\n",
      "Epoch 4/10\n",
      "60000/60000 [==============================] - 14s 237us/step - loss: 0.1889 - acc: 0.9495\n",
      "Epoch 5/10\n",
      "60000/60000 [==============================] - 15s 242us/step - loss: 0.1598 - acc: 0.9564\n",
      "Epoch 6/10\n",
      "60000/60000 [==============================] - 13s 224us/step - loss: 0.1414 - acc: 0.9607\n",
      "Epoch 7/10\n",
      "60000/60000 [==============================] - 12s 206us/step - loss: 0.1279 - acc: 0.9645\n",
      "Epoch 8/10\n",
      "60000/60000 [==============================] - 13s 214us/step - loss: 0.1174 - acc: 0.9667\n",
      "Epoch 9/10\n",
      "60000/60000 [==============================] - 12s 203us/step - loss: 0.1098 - acc: 0.9685\n",
      "Epoch 10/10\n",
      "60000/60000 [==============================] - 12s 205us/step - loss: 0.1019 - acc: 0.9708\n"
     ]
    }
   ],
   "source": [
    "model_vanilla.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01), metrics=['accuracy'])\n",
    "history_vanilla = model_vanilla.fit(x_train, y_train, batch_size=128, epochs=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/10\n",
      "60000/60000 [==============================] - 16s 274us/step - loss: 0.4860 - acc: 0.8567\n",
      "Epoch 2/10\n",
      "60000/60000 [==============================] - 16s 266us/step - loss: 0.2057 - acc: 0.9409\n",
      "Epoch 3/10\n",
      "60000/60000 [==============================] - 15s 247us/step - loss: 0.1583 - acc: 0.9534\n",
      "Epoch 4/10\n",
      "60000/60000 [==============================] - 17s 276us/step - loss: 0.1351 - acc: 0.9609\n",
      "Epoch 5/10\n",
      "60000/60000 [==============================] - 20s 334us/step - loss: 0.1210 - acc: 0.9637\n",
      "Epoch 6/10\n",
      "60000/60000 [==============================] - 20s 334us/step - loss: 0.1067 - acc: 0.9679\n",
      "Epoch 7/10\n",
      "60000/60000 [==============================] - 15s 243us/step - loss: 0.0984 - acc: 0.9705\n",
      "Epoch 8/10\n",
      "60000/60000 [==============================] - 14s 230us/step - loss: 0.0915 - acc: 0.9728\n",
      "Epoch 9/10\n",
      "60000/60000 [==============================] - 15s 243us/step - loss: 0.0863 - acc: 0.9741\n",
      "Epoch 10/10\n",
      "60000/60000 [==============================] - 14s 235us/step - loss: 0.0816 - acc: 0.9761\n"
     ]
    }
   ],
   "source": [
    "model_bn.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01), metrics=['accuracy'])\n",
    "history_bn = model_bn.fit(x_train, y_train, batch_size=128, epochs=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/10\n",
      "60000/60000 [==============================] - 15s 255us/step - loss: 0.5927 - acc: 0.8251\n",
      "Epoch 2/10\n",
      "60000/60000 [==============================] - 14s 235us/step - loss: 0.2262 - acc: 0.9329\n",
      "Epoch 3/10\n",
      "60000/60000 [==============================] - 14s 233us/step - loss: 0.1765 - acc: 0.9468\n",
      "Epoch 4/10\n",
      "60000/60000 [==============================] - 14s 236us/step - loss: 0.1501 - acc: 0.9544\n",
      "Epoch 5/10\n",
      "60000/60000 [==============================] - 14s 236us/step - loss: 0.1365 - acc: 0.9580\n",
      "Epoch 6/10\n",
      "60000/60000 [==============================] - 16s 259us/step - loss: 0.1227 - acc: 0.9629\n",
      "Epoch 7/10\n",
      "60000/60000 [==============================] - 17s 280us/step - loss: 0.1147 - acc: 0.9647\n",
      "Epoch 8/10\n",
      "60000/60000 [==============================] - 16s 267us/step - loss: 0.1082 - acc: 0.9669\n",
      "Epoch 9/10\n",
      "60000/60000 [==============================] - 16s 265us/step - loss: 0.0999 - acc: 0.9695\n",
      "Epoch 10/10\n",
      "60000/60000 [==============================] - 16s 269us/step - loss: 0.0970 - acc: 0.9699\n"
     ]
    }
   ],
   "source": [
    "model_ln.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01), metrics=['accuracy'])\n",
    "history_ln = model_ln.fit(x_train, y_train, batch_size=128, epochs=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize history for accuracy\n",
    "plt.plot(history_vanilla.history['loss'])\n",
    "plt.plot(history_ln.history['loss'])\n",
    "plt.plot(history_bn.history['loss'])\n",
    "plt.title('model loss')\n",
    "plt.ylabel('loss')\n",
    "plt.xlabel('epoch')\n",
    "plt.legend(['history_vanilla loss','history_ln loss','history_bn loss'], loc='upper right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/5\n",
      "60000/60000 [==============================] - 43s 713us/step - loss: 0.2366 - acc: 0.9330\n",
      "Epoch 2/5\n",
      "60000/60000 [==============================] - 40s 666us/step - loss: 0.0973 - acc: 0.9703\n",
      "Epoch 3/5\n",
      "60000/60000 [==============================] - 40s 675us/step - loss: 0.0803 - acc: 0.9747\n",
      "Epoch 4/5\n",
      "60000/60000 [==============================] - 41s 688us/step - loss: 0.0608 - acc: 0.9817\n",
      "Epoch 5/5\n",
      "60000/60000 [==============================] - 41s 677us/step - loss: 0.0540 - acc: 0.9836\n"
     ]
    }
   ],
   "source": [
    "model_vanilla.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01), metrics=['accuracy'])\n",
    "history_vanilla = model_vanilla.fit(x_train, y_train, batch_size=8, epochs=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/5\n",
      "60000/60000 [==============================] - 49s 808us/step - loss: 0.3450 - acc: 0.8919\n",
      "Epoch 2/5\n",
      "60000/60000 [==============================] - 47s 780us/step - loss: 0.2136 - acc: 0.9349\n",
      "Epoch 3/5\n",
      "60000/60000 [==============================] - 47s 780us/step - loss: 0.1752 - acc: 0.9469\n",
      "Epoch 4/5\n",
      "60000/60000 [==============================] - 46s 772us/step - loss: 0.1420 - acc: 0.9570\n",
      "Epoch 5/5\n",
      "60000/60000 [==============================] - 46s 764us/step - loss: 0.1222 - acc: 0.9631\n"
     ]
    }
   ],
   "source": [
    "model_bn.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01), metrics=['accuracy'])\n",
    "history_bn = model_bn.fit(x_train, y_train, batch_size=8, epochs=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/5\n",
      "60000/60000 [==============================] - 47s 784us/step - loss: 0.2278 - acc: 0.9280\n",
      "Epoch 2/5\n",
      "60000/60000 [==============================] - 45s 758us/step - loss: 0.0959 - acc: 0.9702\n",
      "Epoch 3/5\n",
      "60000/60000 [==============================] - 47s 780us/step - loss: 0.0768 - acc: 0.9763\n",
      "Epoch 4/5\n",
      "60000/60000 [==============================] - 45s 747us/step - loss: 0.0592 - acc: 0.9817\n",
      "Epoch 5/5\n",
      "60000/60000 [==============================] - 47s 782us/step - loss: 0.0491 - acc: 0.9848\n"
     ]
    }
   ],
   "source": [
    "model_ln.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01), metrics=['accuracy'])\n",
    "history_ln = model_ln.fit(x_train, y_train, batch_size=8, epochs=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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i76NtPw03t35LuGe4UyInWDtkoSodS99v5d9x3NrPvAKtA71YurgNpc8pry8nPHjx7NhwwbCwsL47rvvcHV1ZcyYMQwaNIg777yTKVOmsGzZMhwcHLjpppsYNmwYy5Yt47fffuOVV15h6dKl5OXl8eCDD1JYWEiLFi2YP38+vr6+9O3blw4dOrBu3ToGDx7MRx99xMGDB3F0dCQ3N5f27dubX1eVmJjI/fffz6ZNmwBjK2jw4MHs3r2badOm8f3331NUVESPHj147733UErRt29funXrxqpVq8jJyWHevHnExcWxevVqpk+fzg8//HDRP4cPPviA999/n9LSUqKjo1m4cCFubm4XPT4lJYWxY8eSmZlJYGAgCxYsICIigq+++oqXXnoJe3t7vL29WbNmDXv37uVvf/sbpaWlVFRUsHTpUmJiYi763lfK6qOhbMnE9hMZ3HwwM7fP5IfDF/8PLoS4MklJSUyaNIm9e/fi4+PD0qXnXjjIysrim2++Ye/evezatYvnnnuOHj16MGTIEN5880127NhBixYtuP/++/n3v//Nrl27aNeuHS+99JL5PUpLS9myZQtTp06lb9++/PjjjwAsWrSIYcOGVXszWqtWrSgtLeXIkSMALF68mLvvvhuAyZMns3nzZvbs2UNRUdE5IVBWVsamTZt46623zqmhJsOGDWPz5s3s3LmTa6+9lnnz5l3y+IcffpjRo0eza9cuRo4cab7MNW3aNBISEti5cyfLlhm7gt99910effRRduzYwZYtWwgPD7/sui6HtCyqUErxUo+XOFl4khfWv0CwWzBdQrpYuywhak1NLQBLiYqKokMH44QMnTp1IiUl5Zz93t7euLi48MADDzBo0CAGDRp0wXucOXOGnJwc+vTpA8Do0aO56667zPsrf8kDjBs3jjfeeIPbbruNBQsW8MEHH1y0tuHDh7N48WKmTJnC4sWLWbx4MQCrVq3ijTfeoLCwkNOnT9OmTRsGDx4MGH/pX+y7XMqePXt47rnnyMnJIT8/n/j4+Ese//vvv/P1118DcN999/HUU08B0LNnT8aMGcPw4cPNtXTv3p1XX32V1NRUhg0bVqutCpCWxQUc7R35b9//Eu4ZzmOrHuPwGYsMwhKiUXF2djY/t7e3p6ys7Jz9Dg4ObNq0iTvvvJMffviBgQMHnv8WNXJ3dzc/79mzJykp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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize history for accuracy\n",
    "plt.plot(history_vanilla.history['loss'])\n",
    "plt.plot(history_ln.history['loss'])\n",
    "plt.plot(history_bn.history['loss'])\n",
    "plt.title('model loss')\n",
    "plt.ylabel('loss')\n",
    "plt.xlabel('epoch')\n",
    "plt.legend(['history_vanilla loss','history_ln loss','history_bn loss'], loc='upper right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
